40.3 测试Spring Boot应用

Spring Boot应用只是一个Spring ApplicationContext,所以在测试时对它只需要像处理普通Spring context那样即可。唯一需要注意的是,如果你使用SpringApplication创建上下文,外部配置,日志和Spring Boot的其他特性只会在默认的上下文中起作用。

Spring Boot提供一个@SpringApplicationConfiguration注解用于替换标准的spring-test @ContextConfiguration注解,该组件工作方式是通过SpringApplication创建用于测试的ApplicationContext

你可以使用@SpringBootTestwebEnvironment属性定义怎么运行测试:

  • MOCK - 加载WebApplicationContext,并提供一个mock servlet环境,使用该注解时内嵌servlet容器将不会启动。如果classpath下不存在servlet APIs,该模式将创建一个常规的non-web ApplicationContext

  • RANDOM_PORT - 加载EmbeddedWebApplicationContext,并提供一个真实的servlet环境。使用该模式内嵌容器将启动,并监听在一个随机端口。

  • DEFINED_PORT - 加载EmbeddedWebApplicationContext,并提供一个真实的servlet环境。使用该模式内嵌容器将启动,并监听一个定义好的端口(比如application.properties中定义的或默认的8080端口)。

  • NONE - 使用SpringApplication加载一个ApplicationContext,但不提供任何servlet环境(不管是mock还是其他)。

不要忘记在测试用例上添加@RunWith(SpringRunner.class),否则该注解将被忽略。